import { sortedJsonString } from "@/utils";
import { $secretKey } from "./httpAxios";
import CryptoJS from "crypto-js";
// 请求前缀url
const baseUrl: any = "";
/*
 * path: 请求路径
 * method: 请求方法 默认get
 * data: 请求参数 默认为空
 * */
export default (path: string, method = "GET", data: any = {}) => {
  method = method.toUpperCase();
  data = filterParams(data);
  const params = sortedJsonString(data) + $secretKey;
  // 默认请求头
  const requestHeader: any = {
    headers: {
      "content-type": "application/json",
      sign: CryptoJS.MD5(params).toString()
    },
    method
  };
  // 如果是get请求
  if (method === "GET") {
    // 转换拼接get参数
    const esc = encodeURIComponent;
    const queryParams = Object.keys(data)
      .map(k => `${esc(k)}=${esc(data[k])}`)
      .join("&");
    if (queryParams) path += `?${queryParams}`;
  } else {
    // 其他请求 放入body里面
    requestHeader.body = JSON.stringify(data);
  }
  // 可以在这封装一个回调函数，请求拦截
  // 发送请求并返回 promise 对象 注意 fetch不会拦截其他异常请求️
  return fetch(`${baseUrl}${path}`, requestHeader).then(
    // 可在这里封装 响应拦截函数
    response => response?.json?.()
  );
};
